<?php
/**
 * script class file
 *
 * @author tommy <streen003@gmail.com>
 * @copyright  Copyright (c) 2010 Tommy Software Studio
 * @link http://www.doitphp.com
 * @license New BSD License.{@link http://www.opensource.org/licenses/bsd-license.php}
 * @version $Id: script.class.php 1.3 2011-11-13 21:18:01Z tommy $
 * @package libraries
 * @since 1.0
 */

if (!defined('IN_DOIT')) {
    exit();
}

class script extends Base {

    /**
     * 加载JS文件(只限doitphp集成的js文件)
     *
     * @access public
     * @return string $script_name js文件名(不含后缀)
     * @return string
     */
    public static function add($script_name) {

        //参数分析
        if (!$script_name) {
            return false;
        }

        $script_name = strtolower(trim($script_name));

        //分析JS文件存放目录
        $base_dir_url = Controller::get_base_url() . 'assets/doit/js/';

        switch ($script_name) {
            case 'jquery':
                $html = "<script type=\"text/javascript\" src=\"" . $base_dir_url . "jquery/jquery.min.js?version=1.7.1\"></script>\r";
                break;
            case 'thickbox':
                $html = "<script type=\"text/javascript\">if(typeof tb_pathToImage!='string'){var tb_pathToImage=\"" . $base_dir_url . "thickbox/loading.gif\"}</script><script type=\"text/javascript\" src=\"" . $base_dir_url . "thickbox/thickbox.min.js?version=3.1\"></script>\r<link href=\"" . $base_dir_url . "thickbox/thickbox.css\" rel=\"stylesheet\" type=\"text/css\" />\r";
                break;
            case 'form':
                $html = "<script type=\"text/javascript\" src=\"" . $base_dir_url . "jquery/jquery.form.min.js?version=2.8.3\"></script>\r";
                break;
            case 'calendar':
                $html = "<script type=\"text/javascript\" src=\"" . $base_dir_url . "calendar/WdatePicker.js?version=4.7.2\"></script>\r";
                break;
            case 'checkbox':
                $html = "<script type=\"text/javascript\" src=\"" . $base_dir_url . "jquery/jquery.checkbox.min.js?version=1.1\"></script>\r";
                break;
            case 'lazyload':
                $html = "<script type=\"text/javascript\" src=\"" . $base_dir_url . "jquery/jquery.lazyload.min.js?version=20110810\"></script>\r";
                break;
            default:
                $html = "<script type=\"text/javascript\" src=\"" . $script_name . ".js\"></script>\r";
        }

        return $html;
    }

    /**
     * 调用日历
     *
     * @param string $tag            选择器标签
     * @param string $start_date    可选的开始日期
     * @param string $end_date        可选的结束日期
     * @param string $date_fomat    日期格式.注：本参数支持时分秒
     * @return string
     *
     * @example
     * 法一:
     * script::calendar('#calendar_box');
     *
     * 法二:
     * script::calendar('#calendar_box', '2010-05-04', '2012-12-21');
     *
     * 法三:(格式:年-月-日 时:分:秒)
     * script::calendar('#calendar_box', '2010-05-04', '2012-12-21', 'yyyy-MM-dd HH:mm:ss');
     */
    public static function calendar($tag, $start_date = null, $end_date = null, $date_fomat = null) {

        //参数分析.
        if (!$tag) {
            return false;
        }

        //自定义日历参数
        $calendar_params = '';
        if (!is_null($start_date)) {
            $calendar_params .= ((!$calendar_params) ? '{' : ',') . 'minDate:\'' . $start_date . '\'';
        }
        if (!is_null($end_date)) {
            $calendar_params .= ((!$calendar_params) ? '{' : ',') . 'maxDate:\'' . $end_date . '\'';
        }
        if(!is_null($date_fomat)) {
            $calendar_params .= ((!$calendar_params) ? '{' : ',') . 'dateFmt:\'' . $date_fomat . '\'';
        }
        $calendar_params     .= (!$calendar_params) ? '' : '}';

        return "<script type=\"text/javascript\">\$(document).ready(function(){\$('" . $tag . "').addClass('doitphp_calendar');\$('" . $tag . "').click(function(){WdatePicker(" . $calendar_params . ");});});</script>\r";
    }

    /**
     * 处理jquery的ajax post JS代码. 注:非jquery的$.post,而是$.ajax
     *
     * @param string $url            接收网址
     * @param string $data            参数
     * @param string $beforeSend    数据提交前的处理函数
     * @param string $success        数据提交后的处理函数
     * @param string $dataType       返回数据格式 (xml, json, script, htmlt, jsonp等)
     * @return string
     */
    public static function ajax_post($url, $data = null, $beforeSend = null, $success = null, $dataType = null) {

        //参数分析
        if (!$url) {
            return false;
        }

        return self::ajax_request($url, 'POST', $data, $beforeSend, $success, $dataType);
    }

    /**
     * 处理jquery的ajax GET代码. 注:非jquery的$.get,而是$.ajax
     *
     * @param string $url            接收网址
     * @param string $data            参数
     * @param string $beforeSend    数据提交前的处理函数
     * @param string $success        数据提交后的处理函数
     * @param string $dataType       返回数据格式 (xml, json, script, html, jsonp等)
     * @return string
     */
    public static function ajax_get($url, $data = null, $beforeSend = null, $success = null, $dataType = null) {

        //参数分析
        if (!$url) {
            return false;
        }

        return self::ajax_request($url, 'GET', $data, $beforeSend, $success, $dataType);
    }

    /**
     * 处理jquery的ajax 调用代码. 即:jquery的$.ajax
     *
     * @access public
     * @param string $url           接收网址
     * @param string $type          HTTP传输方式(post, get)
     * @param string $data          参数
     * @param string $beforeSend    数据提交前的处理函数
     * @param string $success       数据提交后的处理函数
     * @param string $dataType      返回数据格式 (xml, json, script, html, jsonp等)
     * @return string
     */
    public static function ajax_request($url, $type = 'POST', $data = null, $beforeSend = null, $success = null, $dataType = null) {

        //参数分析
        if (!$url) {
            return false;
        }

        $option_array = array();
        if (!is_null($data)) {
            $option_array[] = "data:'" . (is_array($data) ? http_build_query($data) : $data) . "'";
        }
        if (!is_null($beforeSend)) {
            $option_array[] = "beforeSend:{$beforeSend}";
        }
        if (!is_null($success)) {
            $option_array[] = "success:{$success}";
        }
        if (!is_null($dataType)) {
            $option_array[] = "dataType:'{$dataType}'";
        }

        return "\$.ajax({url:'{$url}',type:'{$type}'," . implode(',', $option_array). "});";
    }

    /**
     * Ajax Loading 加载图片的HTML代码,small为小图片.
     *
     * @param string $options    图片类型(非图片格式类型)
     * @return string
     */
    public static function ajax_loading_image($options = 'small') {

        //选择 ajax loading 类型图片
        $image_name = self::parse_ajax_image($options);

        return '<img src="' . Controller::get_base_url() . 'assets/doit/images/' . $image_name . '"/>';
    }

    /**
     * 处理$.load()的jquery代码.
     *
     * @param string $tag            jquery的选择器标签
     * @param string $url            所要加载内容的网址
     * @param string $image_option    ajax loading图片类型
     * @return string
     */
    public static function ajax_box_load($tag, $url, $image_option = 'small', $loading_img_id = 'doitphp_ajax_loading_image') {

        //参数分析.
        if (!$tag || !$url) {
            return false;
        }

        $base_dir_url = Controller::get_base_url() . 'assets/doit/';

        //选择ajax loading image 的类型.
        $image_name   = self::parse_ajax_image($image_option);

        //组装JS代码
        return "<script type=\"text/javascript\">\$(document).ready(function() {\$('" . $tag . "').append('<img src=\"" . $base_dir_url . "images/" . $image_name . "\" id=\"" . $loading_img_id . "\"/>');var left=parseInt((\$('" . $tag . "').width()-\$('#" . $loading_img_id . "').width())/2);var top=parseInt((\$('" . $tag . "').height()-\$('#" . $loading_img_id . "').height())/2);\$('#" . $loading_img_id . "').css({'margin-top':top+'px','margin-left':left+'px'});\$('" . $tag."').load('" . $url . "',function() {\$('#" . $loading_img_id . "').remove()})});</script>\r";
    }

    /**
     * 处理jquery 插件 lazyload的调用代码
     *
     * @access public
     * @param string    $tag    图片的选择器标签
     * @param string     $options    图片类型(非图片格式类型)
     * @return string
     */
    public static function lazyload($tag = 'img', $options = 'small') {

        //选择AJAX加载类型图片
        $image_name = self::parse_ajax_image($options);

        return "<script type=\"text/javascript\">\$(document).ready(function(){\$('" . $tag . "').lazyload({placeholder:'" . Controller::get_base_url() . 'assets/doit/images/' . $image_name . "',effect:'fadeIn'});});</script>\r";
    }

    /**
     * 分析ajax加载图片文件名
     *
     * @access public
     * @param string $option 选项
     * @return string
     */
    public static function parse_ajax_image($options = 'small') {

        switch ($options) {
            case 'small':
                $image_name = 'ajax_loading_small.gif';
                break;
            case 'big':
                $image_name = 'ajax_loading_big.gif';
                break;
            case 'bar':
                $image_name = 'ajax_loading_bar.gif';
                break;
            case 'snake':
                $image_name = 'ajax_loading_snake.gif';
                break;
            case 'ring':
                $image_name = 'ajax_loading_ring.gif';
                break;
            default : $image_name = 'ajax_loading_small.gif';
        }

        return $image_name;
    }


    /**
     * 完成jquery form插件提交表单数据的JS代码
     *
     * @access public
     * @param string $form_tags    form标签的选择器
     * @param string $before_fn 提交表单前所绑定的函数名
     * @param string $success_fn 提交表单后所绑定的函数名
     * @param string $dataType       返回数据格式 (xml, json, script, html, jsonp等)
     * @return string
     */
    public static function ajax_form($form_tags, $before = null, $success = null, $dataType = null) {

        $option_array = array();
        if (!is_null($before)) {
            $option_array[] = "beforeSubmit:{$before}";
        }
        if (!is_null($success)) {
            $option_array[] = "success:{$success}";
        }
        if (!is_null($dataType)) {
            $option_array[] = "dataType:'{$dataType}'";
        }

        $option_str = implode(',', $option_array);

        return '<script type="text/javascript">$(document).ready(function(){$(\'' . $form_tags. '\').ajaxForm({' . $option_str . '});});</script>';
    }
}